package elements 
{
	import flash.display.Graphics;
	import flash.display.Shape;
	import flash.display.Sprite;
	import styles.ProgressBarStyle;
	import util.Bounds;
	
	/**
	 * 
	 * @author Kasoi
	 */
	public class ProgressBar extends Sprite 
	{
		
		////////////////////////////////////////////////////////////////////
		// Public properties
		////////////////////////////////////////////////////////////////////
		
		public function get progress() : Number 
		{
			return this._progress;
		}
		
		public function set progress(value: Number) : void 
		{
			this._progress = value;
			this.redraw();
		}
		
		public function get size() : Bounds 
		{
			return this._size;
		}
		
		public function set size(value: Bounds) : void 
		{
			this._size = value;
			this.redraw();
		}
		
		////////////////////////////////////////////////////////////////////
		// Private properties
		////////////////////////////////////////////////////////////////////
		
		private var background: Shape;
		
		private var progressBar: Shape;
		
		private var _size: Bounds;
		
		private var style: ProgressBarStyle;
		
		private var _progress: Number = 0;
		
		////////////////////////////////////////////////////////////////////
		// Public methods
		////////////////////////////////////////////////////////////////////
		
		public function ProgressBar(size: Bounds = null, style: ProgressBarStyle = null) 
		{
			if (size == null) size = new Bounds(200, 10);
			if (style == null) style = new ProgressBarStyle();
			
			this._size = size;
			this.style = style;
			
			this.background = new Shape();
			this.progressBar = new Shape();
			
			this.addChild(this.background);
			this.addChild(this.progressBar);
			
			this.redraw();
		}
		
		public function redraw() : void 
		{
			var s: ProgressBarStyle = this.style;
			var w: Number = this._size.width;
			var h: Number = this._size.height;
			var p: Number = this._progress;
			var g: Graphics;
			
			g = this.background.graphics;
			g.clear();
			g.lineStyle(s.borderThickness, s.borderColor, s.borderAlpha);
			g.beginFill(s.backgroundColor, s.backgroundAlpha);
			g.drawRoundRect(0, 0, w, h, s.roundness, s.roundness);
			g.endFill();
			
			g = this.progressBar.graphics;
			g.clear();
			g.beginFill(s.progressBarColor, s.progressBarAlpha);
			g.drawRoundRect(0, 0, w * p, h, s.roundness, s.roundness);
			g.endFill();
		}
		
		////////////////////////////////////////////////////////////////////
		// Private methods
		////////////////////////////////////////////////////////////////////
		
		////////////////////////////////////////////////////////////////////
		// Listeners
		////////////////////////////////////////////////////////////////////
		
	}
	
}